#include "ArrayBigInt.h"
#include <algorithm> 

std::vector<int> ArrayBigInt::addArrays(const std::vector<int>& num1, const std::vector<int>& num2) {
    // std::vector<int> result;
    // int carry = 0, i = num1.size() - 1, j = num2.size() - 1;

    // while (i >= 0 || j >= 0 || carry) {
    //     int sum = carry;
    //     if (i >= 0) sum += num1[i--];
    //     if (j >= 0) sum += num2[j--];

    //     carry = sum / 10;
    //     result.push_back(sum % 10);
    // }

    // //std::reverse(result.begin(), result.end());
    // return result;

    int n = num1.size(), m = num2.size();
    int maxSize = std::max(n, m) + 1;  // 预留进位空间

    std::vector<int> result(maxSize, 0);  // 直接分配最大所需空间
    int carry = 0, i = 0, j = 0, k = 0;  // k 作为当前写入位置

    while (i < n || j < m || carry) { 
        int sum = carry;
        if (i < n) sum += num1[i++];  // 直接按逆序读取
        if (j < m) sum += num2[j++];

        carry = sum / 10;
        result[k++] = sum % 10;  // 直接使用索引写入
    }

    // 如果最高位是 0，说明没有进位溢出，去掉前导 0
    if (k > 1 && result[k - 1] == 0) {
        result.resize(k - 1);  // 只调整 `size`，不进行额外拷贝
    } else {
        result.resize(k);  // 确保返回的是正确长度的 `vector`
    }

    return result;  // 结果已经是逆序存储，无需 `reverse()`
}
